#include "MyM24C02.h"


//向M24C02指定地址发送一个数据
//参数：addr  寄存器地址
//参数：data  要发送的数据
//返回值：错误标记(0~3) 对应不同段出现错误
uint8_t M24C02_WriteByte(uint8_t addr,uint8_t data)
{
	//开始I2C通信
	MyI2C_Start();
	//发送从机地址
	MyI2C_SendOneData(M24C02_waddr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 1;
	//发送寄存器地址
	MyI2C_SendOneData(addr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 2;
	//发送数据
	MyI2C_SendOneData(data);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 3;
	//结束I2C通信
	MyI2C_Stop();
	return 0;
}


//向M24C02指定地址发送一页数据
//参数：addr  寄存器地址
//参数：data  要发送的数据串
//返回值：错误标记(0~3) 对应不同段出现错误
uint8_t M24C02_WritePage(uint8_t addr,uint8_t* data)
{
	//开始I2C通信
	MyI2C_Start();
	//发送从机地址
	MyI2C_SendOneData(M24C02_waddr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 1;
	//发送寄存器地址
	MyI2C_SendOneData(addr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 2;
	for(uint8_t i=0;i<16;i++)
	{
		//发送数据
		MyI2C_SendOneData(data[i]);
		//如果从机无应答
		if(MyI2C_ReceiveACK()) return 3;
	}
	//结束I2C通信
	MyI2C_Stop();
	return 0;
}

//从M24C02指定地址接收一串数据
//参数：addr  			寄存器地址
//参数：rdata 			用于接收数据的数组
//参数：datalen 		需要接收的数据长度（单位字节）
//返回值：错误标记(0~3) 对应不同段出现错误
uint8_t M24C02_ReadData(uint8_t addr, uint8_t *rdata,uint8_t datalen)
{
	//开始I2C通信
	MyI2C_Start();
	//发送从机写地址
	MyI2C_SendOneData(M24C02_waddr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 1;
	//发送寄存器地址
	MyI2C_SendOneData(addr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 2;
	//转向
	MyI2C_Start();
	//发送从机读地址
	MyI2C_SendOneData(M24C02_raddr);
	//如果从机无应答
	if(MyI2C_ReceiveACK()) return 3;
	//循环接收数据
	for(uint8_t i=0;i<datalen;i++)
	{
		rdata[i]=MyI2C_ReceiveOneData();
		MyI2C_SendACK(0);
	}
	MyI2C_Stop();
	return 0;	
}




